package com.example.qxfw.common.dmgis.edit;


import com.dmgis.common.AInf;
import com.dmgis.common.Dt;
import com.dmgis.common.Se_Part;
import com.dmgis.work.AreaWork;
import com.example.qxfw.common.dmgis.vo.DtVo;

public class AreaEdit {


    /**
     * @param areaWork 面工作区
     * @param dtVo 起始点
     * @param xOffset  x偏移量
     * @param yOffset  y偏移量
     */
    public static void drawRectangle(AreaWork areaWork,DtVo dtVo, double xOffset, double yOffset,AInf aInf){
        //创建一个点集合
        Se_Part sePart=new Se_Part();
        int[] size={5};
        //设置点集合的大小
        sePart.SetSize(1,size);

        double x=dtVo.getX()+xOffset;
        double y=dtVo.getY()+yOffset;

        //起始点
        Dt dt1 = new Dt(dtVo.getX(),dtVo.getY());
        sePart.SetPos(0,dt1);
        dt1.Delete();

        //x偏移点
        Dt dt2 = new Dt(x, dtVo.getY());
        sePart.SetPos(1,dt2);
        dt2.Delete();

        //x、y偏移点
        Dt dt3 = new Dt(x, y);
        sePart.SetPos(2,dt3);
        dt3.Delete();

        //y偏移点
        Dt dt4 = new Dt(dtVo.getX(), y);
        sePart.SetPos(3,dt4);
        dt4.Delete();


        //添加实体
        areaWork.AddObj(sePart, aInf);
        areaWork.SaveWork();

        dt1.Delete();
        dt2.Delete();
        dt3.Delete();
        dt4.Delete();
        sePart.Delete();
    }

    /**
     * 复制实体
     * @param areaWork 面工作区
     * @param index 索引
     */
    public static void copyObj(AreaWork areaWork,int index){
        Se_Part sePart = new Se_Part();
        AInf aInf=new AInf();
        areaWork.GetObjPos(index,sePart);
        areaWork.GetObjInf(index,aInf);
        areaWork.AddObj(sePart,aInf);
        areaWork.SaveWork();

        sePart.Delete();
        aInf.Delete();
    }

    /**
     * 复制实体
     * @param areaWork 面工作区
     * @param index 索引
     * @param aInf 属性
     */
    public static void copyObj(AreaWork areaWork,int index,AInf aInf){
        Se_Part sePart = new Se_Part();
        areaWork.GetObjPos(index,sePart);
        areaWork.GetObjInf(index,aInf);
        areaWork.AddObj(sePart,aInf);
        areaWork.SaveWork();

        sePart.Delete();
    }


    /**
     * 复制实体
     * @param areaWork 面工作区
     * @param index 索引
     * @param xOffset  x偏移量
     * @param yOffset  y偏移量
     */
    public static void copyObj(AreaWork areaWork,int index,double xOffset,double  yOffset){
        Se_Part sePart = new Se_Part();
        Se_Part sePartCopy = new Se_Part();
        areaWork.GetObjPos(index,sePart);

        //复制点集合
        int[] size={sePart.GetPointsNum()+1};
        sePartCopy.SetSize(1,size);
        for (int i=0;i<sePart.GetPointsNum();i++){
            Dt dt = new Dt();
            sePart.GetPoint(i,dt);
            dt.SetX(dt.GetX()+xOffset);
            dt.SetY(dt.GetY()+yOffset);
            sePartCopy.SetPos(i,dt);
            dt.Delete();
        }

        AInf aInf=new AInf();
        areaWork.GetObjInf(index,aInf);

        areaWork.AddObj(sePartCopy,aInf);
        areaWork.SaveWork();

        sePart.Delete();
        sePartCopy.Delete();
        aInf.Delete();
    }

    /**
     * 复制实体
     * @param areaWork 面工作区
     * @param index 索引
     * @param xOffset  x偏移量
     * @param yOffset  y偏移量
     * @param aInf 属性
     */
    public static void copyObj(AreaWork areaWork,int index,double xOffset,double  yOffset,AInf aInf){
        Se_Part sePart = new Se_Part();
        Se_Part sePartCopy = new Se_Part();
        areaWork.GetObjPos(index,sePart);

        //复制点集合
        int[] size={sePart.GetPointsNum()+1};
        sePartCopy.SetSize(1,size);
        for (int i=0;i<sePart.GetPointsNum();i++){
            Dt dt = new Dt();
            sePart.GetPoint(i,dt);
            dt.SetX(dt.GetX()+xOffset);
            dt.SetY(dt.GetY()+yOffset);
            sePartCopy.SetPos(i,dt);
            dt.Delete();
        }
        areaWork.AddObj(sePartCopy,aInf);
        areaWork.SaveWork();

        sePart.Delete();
        sePartCopy.Delete();
    }


}
